<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
   引用通告类 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档
  </title>
  <link rel="shortcut icon" href="/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  <link rel="stylesheet" type="text/css" media="all" href="/user_guide/userguide.css" />
  <link rel="search" href="/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索" />
  <link rel="canonical" href="/user_guide/libraries/trackback.html" />
  <script type="text/javascript" src="/user_guide/nav/nav.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/prototype.lite.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/moo.fx.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/user_guide_menu.js">
  </script>
  <meta name="robots" content="all" />
  <meta name="author" content="ExpressionEngine Dev Team" />
  <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
 </head>
 <body>
  <!-- START NAVIGATION -->
  <div id="nav">
   <div id="nav_inner">
    <script type="text/javascript">
     create_menu('/user_guide/');
    </script>
   </div>
  </div>
  <script type="text/javascript">
   _setNavigation();
  </script>
  <div id="nav2">
   <a name="top">
   </a>
   <a href="javascript:void(0);" onclick="myHeight.toggle();">
    <img src="/user_guide/images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" />
   </a>
  </div>
  <div id="masthead">
   <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
    <tr>
     <td width="350">
      <h1>
       CodeIgniter 用户指南 版本 2.0.0
      </h1>
     </td>
     
     <td id="breadcrumb_right">
      <a href="/user_guide/toc.html">
       目录页
      </a>
     </td>
    </tr>
   </table>
  </div>
  <!-- END NAVIGATION -->
  <!-- START BREADCRUMB -->
  <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
   <tr>
    <td id="breadcrumb">
     <a href="/" target="_blank">
      CodeIgniter 中国首页
     </a>
     &nbsp;&#8250;&nbsp;
     <a href="/user_guide/toc.html">用户指南目录</a>
     &nbsp;&#8250;&nbsp;引用通告类
    </td>
    <td id="searchbox">
     <form method="get" action="http://www.google.com/search" target="google_window">
      <input type="hidden" name="client" value="pub-0176846097796333" />
      <input type="hidden" name="forid" value="1" />
      <input type="hidden" name="ie" value="UTF-8" />
      <input type="hidden" name="oe" value="UTF-8" />
      <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
      搜索用户指南&nbsp;
      <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
      &nbsp;
      <input type="submit" class="submit" name="sa" value="Go" />
     </form>
    </td>
   </tr>
  </table>
  <!-- END BREADCRUMB -->
  <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
   <a href="http://codeigniter.com/user_guide/libraries/trackback.html" target="_blank">
    查看原文
   </a>
  </div>
  <!--<br clear="all"  />-->
  <!-- START CONTENT -->
  <div id="content">
   <h1>
    引用通告类
   </h1>
   <p>
    这个类提供了一组函数使你能够发送和接收引用通告的数据.
   </p>
   <p>
    如果你对引用通告不太熟悉的话可以在
    <a href="http://en.wikipedia.org/wiki/Trackback">
     这里
    </a>
    查看更多的信息.
   </p>
   <h2>
    初始化类
   </h2>
   <p>
    和其它大多数类一样,Trackback 类 也是使用
    <dfn>
     $this-&gt;load-&gt;library
    </dfn>
    function:
   </p>
   <code>
    $this-&gt;load-&gt;library('trackback');
   </code>
   <p>
    加载完毕后,Trackback 对象就能够用:
    <dfn>
     $this-&gt;trackback
    </dfn>
    方式使用.
   </p>
   <h2>
    发送引用通告(Trackbacks)
   </h2>
   <p>
    引用通告可以从任何控制器函数中使用与示例相似的代码来发送:
   </p>
   <code>
    $this-&gt;load-&gt;library('trackback');
    <br />
    <br />
    $tb_data = array(
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ping_url'&nbsp;&nbsp;=> 'http://example.com/trackback/456',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'http://www.my-example.com/blog/entry/123',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'The Title of My Entry',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'excerpt'&nbsp;&nbsp;&nbsp;=> 'The entry content.',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'blog_name' => 'My Blog Name',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'charset'&nbsp;&nbsp;&nbsp;=> 'utf-8'
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
    <br />
    <br />
    if ( ! $this-&gt;trackback-&gt;send($tb_data))
    <br />
    &#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $this-&gt;trackback-&gt;display_errors();
    <br />
    &#125;
    <br />
    else
    <br />
    &#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo 'Trackback was sent!';
    <br />
    &#125;
   </code>
   <p>
    数组数据说明:
   </p>
   <ul>
    <li>
     <strong>
      ping_url
     </strong>
     - 你想要发送引用通告的站点的URL。要把引用通告发送至多个URL，请将这些URL用逗号分隔开来。
    </li>
    <li>
     <strong>
      url
     </strong>
     - 能够浏览到你站点上的博客日志的URL。
    </li>
    <li>
     <strong>
      title
     </strong>
     - 你的博客日志的标题。
    </li>
    <li>
     <strong>
      excerpt
     </strong>
     - 你的博客日志的内容。说明：引用通告类只会自动地发送日志内容的前500个字符。它还会去除所有的HTML。
    </li>
    <li>
     <strong>
      blog_name
     </strong>
     - 你的博客的名称。
    </li>
    <li>
     <strong>
      charset
     </strong>
     - 你的博客所使用的字符编码。如果省略，将会默认使用UTF-8。
    </li>
   </ul>
   <p>
    根据发送的成功与否，引用通告发送函数将分别返回 TRUE/FALSE(布尔值)。如果发送失败，你可以通过下面的方式获取到错误信息:
   </p>
   <code>
    $this-&gt;trackback-&gt;display_errors();
   </code>
   <h2>
    接收引用通告
   </h2>
   <p>
    在接收引用通告之前你必须得创建一个博客。如果你连博客都没有，那就没有必要继续下去了。
   </p>
   <p>
    接收引用通告要比发送复杂一点，这仅仅是因为你将需要一个数据表来存储它们，而且你还得验证发送过来的引用通告数据。我们鼓励你去实现一个完整的验证过程，目的是防范垃圾信息和重复数据。你也许还想限制某个给定的时间范围内某个特定IP所能发送给你的引用通告数量，这样可以防范今后的垃圾邮件。接收引用通告的处理过程是很简单的；只不过验证过程占用了大部分的工作量。
   </p>
   <h2>
    你的 Ping URL
   </h2>
   <p>
    为了接受引用通告，你必须在每个博客日志旁边显示一个引用通告URL。这就是人们向你发送引用通告时用到的URL(我们把这个称为你的"Ping URL")。
   </p>
   <p>
    你的Ping URL必须指向一个包含了引用通告接收代码的控制器，而且URL也必须包含每个特定的日志条目的ID，因此当你接收到引用通告的时候，你就能够将它与某篇日志关联起来。
   </p>
   <p>
    例如，如果你的控制器类叫做
    <dfn>
     Trackback
    </dfn>
    ，接收函数叫做
    <dfn>
     receive
    </dfn>
    ，那么你的Ping URL看起来应该是这样的:
   </p>
   <code>
    http://example.com/index.php/trackback/receive/
    <samp>
     entry_id
    </samp>
   </code>
   <p>
    其中
    <samp>
     entry_id
    </samp>
    代表了你的每篇日志单独的ID号。
   </p>
   <h2>
    创建一个引用通告表
   </h2>
   <p>
    在接收引用通告之前你必须创建一个表来存储它们。 下面是表的基础原型:
   </p>
   <textarea class="textarea" style="width:100%" cols="50" rows="13">
    CREATE TABLE trackbacks (
 tb_id int(10) unsigned NOT NULL auto_increment,
 entry_id int(10) unsigned NOT NULL default 0,
 url varchar(200) NOT NULL,
 title varchar(100) NOT NULL,
 excerpt text NOT NULL,
 blog_name varchar(100) NOT NULL,
 tb_date int(10) NOT NULL,
 ip_address varchar(16) NOT NULL,
 PRIMARY KEY `tb_id` (`tb_id`),
 KEY `entry_id` (`entry_id`)
);
   </textarea>
   <p>
    引用通告规范只需要发送四部分信息(url,title,excerpt,blog_name)到引用通告，但是为了使数据更有用，我们在上面的数据表架构中添加了一些字段(日期、IP地址等等)。
   </p>
   <h2>
    处理一个引用通告
   </h2>
   <p>
    这里有一个关于如何接收和处理引用通告的范例。下面这些代码应该被用在你要接收引用通告的控制器函数里面。
   </p>
   <code>
    $this-&gt;load-&gt;library('trackback');
    <br />
    $this-&gt;load-&gt;database();
    <br />
    <br />
    if ($this-&gt;uri-&gt;segment(3) == FALSE)
    <br />
    &#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;trackback-&gt;send_error("Unable to determine the entry ID");
    <br />
    &#125;
    <br />
    <br />
    if ( ! $this-&gt;trackback-&gt;receive())
    <br />
    &#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;trackback-&gt;send_error("The Trackback did not contain valid data");
    <br />
    &#125;
    <br />
    <br />
    $data = array(
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tb_id'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '',
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'entry_id'&nbsp;&nbsp;&nbsp;=> $this-&gt;uri-&gt;segment(3),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('url'),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('title'),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'excerpt'&nbsp;&nbsp;&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('excerpt'),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'blog_name'&nbsp;&nbsp;=> $this-&gt;trackback-&gt;data('blog_name'),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tb_date'&nbsp;&nbsp;&nbsp;&nbsp;=> time(),
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ip_address' => $this-&gt;input-&gt;ip_address()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
    <br />
    <br />
    $sql = $this-&gt;db-&gt;insert_string('trackbacks', $data);
    <br />
    $this-&gt;db-&gt;query($sql);
    <br />
    <br />
    $this-&gt;trackback-&gt;send_success();
   </code>
   <h4>
    说明:
   </h4>
   <p>
    条目ID号应该出现在你的URL的第三段中。这个的依据是我们之前给出的URI范例:
   </p>
   <code>
    http://example.com/index.php/trackback/receive/
    <samp>
     entry_id
    </samp>
   </code>
   <p>
    注意 entry_id 位于URI的第三段，这样你就可以通过下面这种方式获取到它:
   </p>
   <code>
    $this-&gt;uri-&gt;segment(3);
   </code>
   <p>
    在上面的引用通告接收代码中，如果缺少第三段，我们将发出错误警告。缺少有效的条目ID，也就没有理由继续下去了。
   </p>
   <p>
    <dfn>
     $this-&gt;trackback-&gt;receive()
    </dfn>
    函数只是一个简单的验证函数，作用是检查输入的数据以确保其中包含了必需的四部分数据(url, title, excerpt, blog_name)。如果成功则返回 TRUE，失败则返回 FALSE。如果失败，你将看到一条错误信息。
   </p>
   <p>
    可以使用下面的函数获取输入的引用通告数据:
   </p>
   <code>
    $this-&gt;trackback-&gt;data('
    <var>
     item
    </var>
    ')
   </code>
   <p>
    其中
    <var>
     item
    </var>
    代表这四部分信息中的一部分: url, title, excerpt, 或者 blog_name。
   </p>
   <p>
    如果引用通告数据被成功地接收，你将可以使用下面的方式获取到一条成功信息:
   </p>
   <code>
    $this-&gt;trackback-&gt;send_success();
   </code>
   <p class="important">
    <strong>
     注意:
    </strong>
    上面的代码不包含数据验证，那正是我们鼓励你去添加的。
   </p>
   <p>
    &nbsp;
   </p>
   <div id="Contributors">
    翻译贡献者:
Drice, Hex, shnwqshnwq, yinzhili
   </div>
   <div id="DocDate">
    最后修改: 2010-11-10 11:48:26
   </div>
  </div>
  <!-- END CONTENT -->
  <div id="footer">
   <p>
    上一个主题:&nbsp;&nbsp;
    <a href="/user_guide/libraries/sessions.html">
     Session 类
    </a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;
    <a href="#top">
     页首
    </a>
    &nbsp;&middot;&nbsp;&nbsp;
    <a href="/user_guide/toc.html">用户指南目录</a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;
    <a href="/user_guide/libraries/parser.html">
     模板解析器类
    </a>
   </p>
   <p>
    <a href="http://codeigniter.com">
     CodeIgniter
    </a>
    &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2011 &nbsp;&middot;&nbsp;
    <a href="http://ellislab.com/">
     Ellislab, Inc.
    </a>
   </p>
   <p>
    中文化:
    <a href="">
     CodeIgniter 中国
    </a>
    &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.20 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼
   </p>
  </div>
  
  <div style="display:none">
   
   <noscript>
    <a href="http://www.51.la/?3289908" target="_blank">
     <img alt="我要啦免费统计" src="http://img.users.51.la/3289908.asp" style="border:none" />
    </a>
   </noscript>
  </div>
 </body>
</html>